Skip to content

JD12 统计每个月兔子的总数 ​

本节目标:理解“JD12 统计每个月兔子的总数”的核心思路,并能把它用于实际开发或面试表达。 简单 通过率:42.58% 时间限制:1秒 空间限制:32M 知识点==查找====排序== 描述 有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。 例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少? 数据范围:输入满足 1≤�≤31 1≤n≤31 输入描述: 输入一个int型整数表示第n个月 输出描述: 输出对应的兔子总数 示例1 输入: 3 ==复制== 输出: 2

这个问题实际上是斐波那契数列的一个变种,它考察的是每个月兔子的增长情况。在这个问题中,一个兔子从第三个月开始每个月都会生出一个新的兔子,而新生的兔子也会在它们达到第三个月时开始每个月生一个新兔子。这就形成了一个每月都在增长的序列。

解题思路 ​

  • 第1个月开始时,有1只成年兔子。
  • 第2个月,这只成年兔子还没有生育,所以还是1只兔子。
  • 第3个月,这只成年兔子生了第一只小兔子,总数变为2只兔子。
  • 从第4个月开始,情况开始变得复杂,因为新生的小兔子在第三个月后也能开始生育。

所以,从第三个月开始,每个月的兔子数量是前两个月兔子数量的和。这是因为:

  • 当月的成年兔子(包括上个月就已经是成年的和这个月刚变成成年的)都会生出新的小兔子。
  • 所有上个月的兔子(包括成年的和小兔子)在这个月都还活着。

代码实现 ​

下面是一个Python代码实例,使用递归方式计算第n个月的兔子总数:

def rabbit(n):

如果是第一个月或第二个月,直接返回1 ​

if n == 1 or n == 2: return 1

递归调用计算前两个月的兔子总数并相加 ​

else: return rabbit(n-1) + rabbit(n-2)

读取输入 ​

n = int(input())

输出第n个月的兔子总数 ​

print(rabbit(n))

注意:这种递归方法虽然直观,但在n较大时会因为重复计算同一个值而效率低下。对于更高效的解法,可以考虑使用动态规划或直接用循环计算斐波那契数列。

下面是使用循环的方法: def rabbit(n): a, b = 1, 1 for i in range(2, n): a, b = b, a + b return b

n = int(input()) print(rabbit(n))

这个循环方法避免了递归的重复计算,效率更高。

本站总访问 — 次